﻿#ifndef DC_MARK_CONFIG_DIALOG_H
#define DC_MARK_CONFIG_DIALOG_H

#include <QDialog>
#include <QCheckBox>
#include <QMenu>
#include <QMessageBox>
#include <QMouseEvent>

#include <QDebug>

enum AttrManageState
{
	ATTRMANAGE_INIT = 0,//初始状态，属性配置框隐藏
	ATTRMANAGE_SEE,//查看
	ATTRMANAGE_ADD,//新增
	ATTRMANAGE_ADDING,//新增中
	ATTRMANAGE_EDIT,//编辑
	ATTRMANAGE_EDITTING//编辑中
};


namespace Ui {
	class MarkConfigDialog;
}

class MarkConfigDialog : public QDialog
{
	Q_OBJECT

public:
	explicit MarkConfigDialog(QWidget* parent = 0);
	~MarkConfigDialog();

	void SetAlreadyAttr(const QList<QPair<QString, QString>>& attr_script_list);//设置已配置的属性
	void SetAlreadyRegulation(const QString& markname_regulation, const QStringList& enable_attr_list);//设置已配置的规则

private:
	void InitAttrConfigGroupBox();//初始化熟悉配置框
	void SetAttrGroupBoxVisible(bool visible);
	void AttrScriptCheck();//脚本检测
	void NewAttr();//创建新属性
	void AddAttr();//脚本检测通过后，添加脚本到属性栏
	void SettingFinished();//配置完成
	void ScriptTextChanged();//脚本文本变化
	void AttrNameTextChanged();//属性名称文本变化
	void AttrCheckBoxCustomContextMenu(const QPoint& pos);
	void AttrSeeAction();//属性查看
	void AttrEditAction();//属性编辑
	void AttrEditPushbutton();//属性编辑
	void AttrEditOkPushbutton();//属性编辑完成
	void AttrDeleteAction();//属性删除

signals:
	void AddAttrScriptSignal(const QString& name, const QString& script);//新增
	void ReviseAttrScriptSignal(const QString& name, const QString& script);//修改
	void DeleteAttrScriptSignal(const QString& name);//删除
	void SaveMarkRegulationSignal(const QString& markname_regulation, const QStringList& enable_attr_list);//保存标点规则信息

private:
	Ui::MarkConfigDialog* ui;
	QMap<QString, QString> attr_script_map_;
	QCheckBox* current_menu_atrr_checkbox_;//当前菜单操作的属性名称

	AttrManageState attr_manage_state_;//属性管理状态
	QMenu* attr_manage_menu_; //属性管理菜单
	QAction* action_attr_see_;//属性查看
	QAction* action_attr_edit_;//属性编辑
	QAction* action_attr_delete_;//属性删除
};

#endif // DC_MARK_CONFIG_DIALOG_H
